/*
 * @Author: 玄绮 <shijiahansi@qq.com>
 * @Description: 
 * @Date: 2021-10-27 08:57:55
 * @LastEditTime: 2021-10-31 18:30:09
 */
#include <REG52.H>
#include "51_type.h"

//定义74HC595控制管脚
sbit SRCLK1 = const_P3 ^ 6; //移位寄存器时钟输入
sbit RCLK1 = const_P3 ^ 5;  //存储寄存器时钟输入
sbit SER = const_P3 ^ 4;	  //串行数据输入


/**
 * @Author: 玄绮 <shijiahansi@qq.com>
 * @Date: 2021-10-27 09:07:24
 * @brief 延时函数 
 * @param {uint16} ten_us /10纳秒
 * @return void
 */
void delay_10us(uint16 ten_us) {
    while (ten_us--)
        ;
}

/**
 * @Author: 玄绮 <shijiahansi@qq.com>
 * @Date: 2021-10-27 09:07:24
 * @brief 延时函数 
 * @param {uint16} ten_us /1毫秒
 * @return void
 */
void delay_1ms(uint32 ten_ms) {
    ten_ms *= 25;
    while (ten_ms--)
        ;
}

/**
 * @Author: 玄绮 <shijiahansi@qq.com>
 * @Date: 2021-10-31 18:29:14
 * @brief 向74HC595写入一个字节的数据
 * @param {uint8} dat 数据
 * @return {*}
 */
void hc595_write_data(uint8 dat)
{
    uint8 i = 0;

    for (i = 0; i < 8; i++) //循环8次即可将一个字节写入寄存器中
    {
        SER = dat >> 7; //优先传输一个字节中的高位
        dat <<= 1;      //将低位移动到高位
        SRCLK1 = 0;
        delay_10us(1);
        SRCLK1 = 1;
        delay_10us(1); //移位寄存器时钟上升沿将端口数据送入寄存器中
    }
    RCLK1 = 0;
    delay_10us(1);
    RCLK1 = 1; //存储寄存器时钟上升沿将前面写入到寄存器的数据输出
}
